// API 基础 URL
const API_BASE = 'http://localhost:8080/api';

// 当前扫描的数据
let scanData = null;

/**
 * 扫描照片和视频
 */
async function scanPhotos() {
    const pathInput = document.getElementById('path-input');
    const path = pathInput.value.trim();
    
    // 验证输入
    if (!path) {
        showError('请输入照片和视频目录路径');
        return;
    }
    
    // 隐藏之前的结果
    hideElement('error');
    hideElement('success');
    showElement('loading');
    
    try {
        const response = await fetch(API_BASE + '/scan', {
            method: 'POST',
            headers: {
                'Content-Type': 'application/json',
            },
            body: JSON.stringify({ path: path })
        });
        
        const data = await response.json();
        hideElement('loading');
        
        if (data.success) {
            scanData = data.data;
            displayScanResults(data.data);
            showElement('scan-result-card');
            document.getElementById('organize-btn').disabled = false;
        } else {
            showError(data.message || '扫描失败');
        }
        
    } catch (error) {
        hideElement('loading');
        showError('连接服务器失败: ' + error.message);
        console.error(error);
    }
}

/**
 * 整理照片和视频
 */
async function organizePhotos() {
    const pathInput = document.getElementById('path-input');
    const path = pathInput.value.trim();
    
    if (!path) {
        showError('请输入照片和视频目录路径');
        return;
    }
    
    if (!scanData) {
        showError('请先扫描文件后再整理');
        return;
    }
    
    // 确认操作
    const fileCount = scanData.totalFiles;
    const formatCount = Object.keys(scanData.formats).length;
    
    let confirmMsg = `确定要整理照片和视频吗？\n\n`;
    confirmMsg += `• 文件总数：${fileCount} 个\n`;
    confirmMsg += `• 格式种类：${formatCount} 种\n\n`;
    confirmMsg += `文件将被移动到对应的格式文件夹中。`;
    
    if (!confirm(confirmMsg)) {
        return;
    }
    
    hideElement('error');
    hideElement('success');
    showElement('loading');
    
    try {
        const response = await fetch(API_BASE + '/organize', {
            method: 'POST',
            headers: {
                'Content-Type': 'application/json',
            },
            body: JSON.stringify({ path: path })
        });
        
        const data = await response.json();
        hideElement('loading');
        
        if (data.success) {
            showElement('result-card');
            displayResults(data.data);
            showSuccess('照片和视频整理完成！');
            document.getElementById('organize-btn').disabled = true;
        } else {
            showError(data.message || '整理失败');
        }
        
    } catch (error) {
        hideElement('loading');
        showError('连接服务器失败: ' + error.message);
        console.error(error);
    }
}

/**
 * 浏览文件夹
 */
async function browseFolder() {
    const pathInput = document.getElementById('path-input');
    
    // 检查是否支持 File System Access API（Chrome, Edge 等）
    if ('showDirectoryPicker' in window) {
        try {
            const directoryHandle = await window.showDirectoryPicker();
            
            // File System Access API 无法直接获取完整路径（浏览器安全限制）
            // 但我们可以尝试通过读取目录内容来验证目录的有效性
            const dirName = directoryHandle.name;
            
            // 尝试读取目录内容来验证目录是否有效
            let fileCount = 0;
            try {
                // 遍历目录中的条目以获取文件数量
                for await (const entry of directoryHandle.values()) {
                    fileCount++;
                    // 只统计前几个条目以避免长时间等待
                    if (fileCount >= 5) break;
                }
                
                // 如果目录有效，提供更友好的提示
                const message = `已选择目录：${dirName}

` +
                    `检测到该目录包含文件/文件夹。

` +
                    `由于浏览器安全限制，无法自动获取完整路径，请执行以下操作：
` +
                    `1. 在文件管理器中打开刚才选择的文件夹
` +
                    `2. 复制该文件夹的完整路径
` +
                    `3. 将路径粘贴到上面的输入框中

` +
                    `提示：在 Finder (Mac) 或 文件资源管理器 (Windows) 中，
` +
                    `您可以右键点击目录并选择"复制路径"或按住 Option/Alt 键查看完整路径。`;
                
                showInfoDialog(message);
                
                // 将目录名填入输入框作为起始提示
                pathInput.value = '';
                pathInput.placeholder = `已选择目录：${dirName}（请在文件管理器中复制完整路径）`;
            } catch (readError) {
                // 如果读取目录失败，显示简化提示
                const message = `已选择目录：${dirName}

` +
                    `由于浏览器安全限制，无法自动获取完整路径，请执行以下操作：
` +
                    `1. 在文件管理器中打开刚才选择的文件夹
` +
                    `2. 复制该文件夹的完整路径
` +
                    `3. 将路径粘贴到上面的输入框中`;
                
                showInfoDialog(message);
                
                // 将目录名填入输入框作为起始提示
                pathInput.value = '';
                pathInput.placeholder = `已选择目录名称：${dirName}（请输入完整路径）`;
            }
            
        } catch (error) {
            if (error.name !== 'AbortError') {
                showError('选择目录失败：' + error.message);
                console.error('Directory picker error:', error);
            }
            // AbortError 表示用户取消了选择，不需要显示错误
        }
    } else {
        // 不支持文件系统访问 API，显示帮助信息
        showHelpDialog();
    }
}

/**
 * 显示帮助对话框（用于不支持文件选择器的浏览器）
 */
function showHelpDialog() {
    const platform = navigator.platform.toLowerCase();
    let examples = '';
    let helpText = '';
    
    if (platform.includes('mac')) {
        examples = '- /Users/你的用户名/Pictures\n- /Users/你的用户名/Downloads\n- /Volumes/external_drive/photos';
        helpText = '在 macOS 上获取路径：\n1. 在 Finder 中选择文件夹\n2. 按 Cmd+Option+C 复制路径\n3. 或右键点击文件夹，按住 Option 键选择"xxx"的路径名称';
    } else if (platform.includes('win')) {
        examples = '- C:\\Users\\你的用户名\\Pictures\n- C:\\Users\\你的用户名\\Downloads\n- D:\\Photos';
        helpText = '在 Windows 上获取路径：\n1. 打开文件资源管理器\n2. 导航到文件夹\n3. 在地址栏复制路径';
    } else {
        examples = '- /home/你的用户名/Pictures\n- /home/你的用户名/Downloads';
        helpText = '在 Linux 上获取路径：\n1. 使用文件管理器右键点击文件夹\n2. 选择"复制路径"或\n3. 在终端中使用 pwd 命令';
    }
    
    const message = `请手动输入照片和视频目录的完整路径。

${helpText}

示例路径：
${examples}`;
    
    showInfoDialog(message);
}

/**
 * 显示信息对话框
 */
function showInfoDialog(message) {
    const dialog = document.createElement('div');
    dialog.className = 'info-dialog';
    dialog.innerHTML = `
        <div class="info-dialog-content">
            <div class="info-dialog-header">
                <h3>提示</h3>
                <button onclick="this.closest('.info-dialog').remove()" class="close-btn">×</button>
            </div>
            <div class="info-dialog-body">
                ${message.replace(/\n/g, '<br>')}
            </div>
            <div class="info-dialog-footer">
                <button class="btn btn-primary" onclick="this.closest('.info-dialog').remove()">知道了</button>
            </div>
        </div>
    `;
    document.body.appendChild(dialog);
}

/**
 * 显示扫描结果
 */
function displayScanResults(data) {
    const resultsDiv = document.getElementById('scan-results');
    
    let html = `
        <div class="stat-grid">
            <div class="stat-card">
                <h3>${data.totalFiles}</h3>
                <p>文件总数</p>
            </div>
            <div class="stat-card">
                <h3>${data.totalSizeFormatted}</h3>
                <p>总大小</p>
            </div>
            <div class="stat-card">
                <h3>${Object.keys(data.formats).length}</h3>
                <p>格式种类</p>
            </div>
        </div>
        
        <div class="result-item">
            <h3>格式分布</h3>
            <div class="format-list">
    `;
    
    // 显示格式列表
    const formatEntries = Object.entries(data.formats).sort((a, b) => b[1] - a[1]);
    for (const [format, count] of formatEntries) {
        const size = data.formatSizes[format] || 0;
        const sizeFormatted = formatFileSize(size);
        html += `
            <div class="format-tag">
                ${format}: ${count} 个文件 (${sizeFormatted})
            </div>
        `;
    }
    
    html += `
            </div>
        </div>
    `;
    
    resultsDiv.innerHTML = html;
}

/**
 * 显示整理结果
 */
function displayResults(data) {
    const resultsDiv = document.getElementById('results');
    
    let html = `
        <div class="stat-grid">
            <div class="stat-card">
                <h3>${data.totalFiles}</h3>
                <p>已整理文件</p>
            </div>
            <div class="stat-card">
                <h3>${Object.keys(data.formats).length}</h3>
                <p>格式数量</p>
            </div>
        </div>
        
        <div class="result-item">
            <h3>格式统计</h3>
            <div class="format-list">
    `;
    
    const formatEntries = Object.entries(data.formats).sort((a, b) => b[1] - a[1]);
    for (const [format, count] of formatEntries) {
        html += `<div class="format-tag">${format}: ${count} 个</div>`;
    }
    
    html += `
            </div>
        </div>
    `;
    
    if (data.movedFiles && data.movedFiles.length > 0) {
        html += `
            <div class="result-item">
                <h3>已移动文件（前10个）</h3>
        `;
        
        for (let i = 0; i < Math.min(10, data.movedFiles.length); i++) {
            const file = data.movedFiles[i];
            html += `
                <div class="file-item">
                    <span class="file-name">${file.originalName}</span>
                    <span class="file-size">→ ${file.format}</span>
                </div>
            `;
        }
        
        if (data.movedFiles.length > 10) {
            html += `<p style="text-align: center; margin-top: 10px; color: #666;">
                还有 ${data.movedFiles.length - 10} 个文件...
            </p>`;
        }
        
        html += `</div>`;
    }
    
    resultsDiv.innerHTML = html;
}

/**
 * 显示成功消息
 */
function showSuccess(message) {
    const successDiv = document.getElementById('success');
    document.getElementById('success-message').textContent = message;
    showElement('success');
    
    setTimeout(() => {
        hideElement('success');
    }, 5000);
}

/**
 * 显示错误消息
 */
function showError(message) {
    const errorDiv = document.getElementById('error');
    document.getElementById('error-message').textContent = message;
    showElement('error');
}

/**
 * 显示元素
 */
function showElement(id) {
    document.getElementById(id).style.display = 'block';
}

/**
 * 隐藏元素
 */
function hideElement(id) {
    document.getElementById(id).style.display = 'none';
}

/**
 * 格式化文件大小
 */
function formatFileSize(bytes) {
    if (bytes < 1024) {
        return bytes + ' B';
    } else if (bytes < 1024 * 1024) {
        return (bytes / 1024).toFixed(2) + ' KB';
    } else if (bytes < 1024 * 1024 * 1024) {
        return (bytes / (1024 * 1024)).toFixed(2) + ' MB';
    } else {
        return (bytes / (1024 * 1024 * 1024)).toFixed(2) + ' GB';
    }
}

// 按 Enter 键扫描
document.addEventListener('DOMContentLoaded', function() {
    const pathInput = document.getElementById('path-input');
    pathInput.addEventListener('keypress', function(e) {
        if (e.key === 'Enter') {
            scanPhotos();
        }
    });
    
    // 为评分工具的输入框也添加 Enter 键支持
    const ratingPathInput = document.getElementById('rating-path-input');
    ratingPathInput.addEventListener('keypress', function(e) {
        if (e.key === 'Enter') {
            scanAndRatePhotos();
        }
    });
});

// 工具切换功能
function switchTool(toolName) {
    // 隐藏所有工具
    document.getElementById('organizer-tool').style.display = 'none';
    document.getElementById('rating-tool').style.display = 'none';
    
    // 显示选中的工具
    document.getElementById(toolName + '-tool').style.display = 'block';
    
    // 更新导航链接状态
    document.querySelectorAll('.nav-link').forEach(link => {
        link.classList.remove('active');
    });
    event.target.classList.add('active');
    
    // 隐藏所有结果卡片
    hideElement('scan-result-card');
    hideElement('result-card');
    hideElement('rating-result-card');
    
    // 重置按钮状态
    document.getElementById('organize-btn').disabled = true;
    document.getElementById('copy-btn').disabled = true;
}

// 照片筛选工具功能
let ratedPhotosData = null;
let highRatedPhotos = [];

/**
 * 上传并评分照片
 */
async function uploadAndRatePhotos() {
    const fileInput = document.getElementById('photo-files');
    const minRatingSelect = document.getElementById('upload-min-rating');
    
    const files = fileInput.files;
    const minRating = parseInt(minRatingSelect.value);
    
    if (files.length === 0) {
        showError('请选择至少一个照片文件');
        return;
    }
    
    // 隐藏之前的结果
    hideElement('error');
    hideElement('success');
    showElement('loading');
    
    try {
        const formData = new FormData();
        for (let i = 0; i < files.length; i++) {
            formData.append('files', files[i]);
        }
        formData.append('minRating', minRating);
        
        const response = await fetch(API_BASE + '/rate/batch-upload-and-rate', {
            method: 'POST',
            body: formData
        });
        
        const data = await response.json();
        hideElement('loading');
        
        if (data.success) {
            highRatedPhotos = data.data.ratedFiles || [];
            displayUploadRatingResults(data.data);
            showElement('rating-result-card');
            document.getElementById('download-btn').disabled = highRatedPhotos.length === 0;
        } else {
            showError(data.message || '上传和评分失败');
        }
        
    } catch (error) {
        hideElement('loading');
        showError('连接服务器失败: ' + error.message);
        console.error(error);
    }
}

/**
 * 下载高评分照片
 */
async function downloadHighRatedPhotos() {
    if (highRatedPhotos.length === 0) {
        showError('没有高评分照片可供下载');
        return;
    }
    
    // 逐个下载文件
    for (const photo of highRatedPhotos) {
        try {
            const link = document.createElement('a');
            link.href = API_BASE + '/rate/download/' + encodeURIComponent(photo.tempPath);
            link.download = photo.fileName;
            link.style.display = 'none';
            document.body.appendChild(link);
            link.click();
            document.body.removeChild(link);
            
            // 添加延迟以避免浏览器限制
            await new Promise(resolve => setTimeout(resolve, 1000));
        } catch (error) {
            console.error('下载文件失败:', error);
        }
    }
    
    showSuccess(`已开始下载 ${highRatedPhotos.length} 个高评分照片`);
}

/**
 * 清理临时文件
 */
async function cleanupTempFiles() {
    try {
        const response = await fetch(API_BASE + '/rate/cleanup', {
            method: 'DELETE'
        });
        
        const data = await response.json();
        
        if (data.success) {
            showSuccess(data.message || '临时文件清理完成');
            highRatedPhotos = [];
            document.getElementById('download-btn').disabled = true;
        } else {
            showError(data.message || '清理临时文件失败');
        }
        
    } catch (error) {
        showError('连接服务器失败: ' + error.message);
        console.error(error);
    }
}

/**
 * 显示上传评分结果
 */
function displayUploadRatingResults(data) {
    const container = document.getElementById('rating-results');
    
    let html = `
        <div class="result-item">
            <h3>📊 统计信息</h3>
            <div class="stat-grid">
                <div class="stat-card">
                    <h3>${data.totalRated}</h3>
                    <p>高评分文件数</p>
                </div>
                <div class="stat-card">
                    <h3>${data.lowRatedCount}</h3>
                    <p>低评分文件数</p>
                </div>
            </div>
        </div>
    `;
    
    // 显示高评分文件
    if (data.ratedFiles && data.ratedFiles.length > 0) {
        html += `<div class="result-item">`;
        html += `<h3>⭐ 高评分照片 (${data.ratedFiles.length} 个)</h3>`;
        
        for (const file of data.ratedFiles) {
            html += `
                <div class="file-item">
                    <span class="file-name">${file.fileName}</span>
                    <span class="file-size">${file.sizeFormatted}</span>
                    <span class="file-rating" style="margin-left: 10px; color: #ffc107;">
                        ${'⭐'.repeat(file.rating)}
                    </span>
                </div>
            `;
        }
        
        html += `</div>`;
    }
    
    container.innerHTML = html;
}

/**
 * 扫描并评分照片
 */
async function scanAndRatePhotos() {
    const pathInput = document.getElementById('rating-path-input');
    const path = pathInput.value.trim();
    
    // 验证输入
    if (!path) {
        showError('请输入照片和视频目录路径');
        return;
    }
    
    // 隐藏之前的结果
    hideElement('error');
    hideElement('success');
    showElement('loading');
    
    try {
        const response = await fetch(API_BASE + '/rate/scan', {
            method: 'POST',
            headers: {
                'Content-Type': 'application/json',
            },
            body: JSON.stringify({ path: path })
        });
        
        const data = await response.json();
        hideElement('loading');
        
        if (data.success) {
            ratedPhotosData = data.data;
            displayRatingResults(data.data);
            showElement('rating-result-card');
            document.getElementById('copy-btn').disabled = false;
        } else {
            showError(data.message || '扫描和评分失败');
        }
        
    } catch (error) {
        hideElement('loading');
        showError('连接服务器失败: ' + error.message);
        console.error(error);
    }
}

/**
 * 筛选并复制照片
 */
async function filterAndCopyPhotos() {
    const sourcePathInput = document.getElementById('rating-path-input');
    const targetPathInput = document.getElementById('target-path-input');
    const minRatingSelect = document.getElementById('min-rating');
    
    const sourcePath = sourcePathInput.value.trim();
    const targetPath = targetPathInput.value.trim();
    const minRating = parseInt(minRatingSelect.value);
    
    if (!sourcePath) {
        showError('请输入源照片目录路径');
        return;
    }
    
    if (!targetPath) {
        showError('请输入目标目录路径');
        return;
    }
    
    if (!ratedPhotosData) {
        showError('请先扫描并评分照片');
        return;
    }
    
    // 确认操作
    let confirmMsg = `确定要筛选并复制照片吗？\n\n`;
    confirmMsg += `• 最低评分：${minRating}星\n`;
    confirmMsg += `• 目标目录：${targetPath}\n\n`;
    confirmMsg += `符合条件的照片将被复制到目标目录。`;
    
    if (!confirm(confirmMsg)) {
        return;
    }
    
    hideElement('error');
    hideElement('success');
    showElement('loading');
    
    try {
        const response = await fetch(API_BASE + '/rate/copy', {
            method: 'POST',
            headers: {
                'Content-Type': 'application/json',
            },
            body: JSON.stringify({ 
                sourcePath: sourcePath,
                targetPath: targetPath,
                minRating: minRating
            })
        });
        
        const data = await response.json();
        hideElement('loading');
        
        if (data.success) {
            showSuccess(data.message || '照片筛选并复制完成！');
            document.getElementById('copy-btn').disabled = true;
        } else {
            showError(data.message || '筛选并复制失败');
        }
        
    } catch (error) {
        hideElement('loading');
        showError('连接服务器失败: ' + error.message);
        console.error(error);
    }
}

/**
 * 浏览文件夹（评分工具）
 */
async function browseFolderRating() {
    const pathInput = document.getElementById('rating-path-input');
    
    // 检查是否支持 File System Access API（Chrome, Edge 等）
    if ('showDirectoryPicker' in window) {
        try {
            const directoryHandle = await window.showDirectoryPicker();
            
            // File System Access API 无法直接获取完整路径（浏览器安全限制）
            // 但我们可以尝试通过读取目录内容来验证目录的有效性
            const dirName = directoryHandle.name;
            
            // 尝试读取目录内容来验证目录是否有效
            let fileCount = 0;
            try {
                // 遍历目录中的条目以获取文件数量
                for await (const entry of directoryHandle.values()) {
                    fileCount++;
                    // 只统计前几个条目以避免长时间等待
                    if (fileCount >= 5) break;
                }
                
                // 如果目录有效，提供更友好的提示
                const message = `已选择目录：${dirName}

` +
                    `检测到该目录包含文件/文件夹。

` +
                    `由于浏览器安全限制，无法自动获取完整路径，请执行以下操作：
` +
                    `1. 在文件管理器中打开刚才选择的文件夹
` +
                    `2. 复制该文件夹的完整路径
` +
                    `3. 将路径粘贴到上面的输入框中

` +
                    `提示：在 Finder (Mac) 或 文件资源管理器 (Windows) 中，
` +
                    `您可以右键点击目录并选择"复制路径"或按住 Option/Alt 键查看完整路径。`;
                
                showInfoDialog(message);
                
                // 将目录名填入输入框作为起始提示
                pathInput.value = '';
                pathInput.placeholder = `已选择目录：${dirName}（请在文件管理器中复制完整路径）`;
            } catch (readError) {
                // 如果读取目录失败，显示简化提示
                const message = `已选择目录：${dirName}

` +
                    `由于浏览器安全限制，无法自动获取完整路径，请执行以下操作：
` +
                    `1. 在文件管理器中打开刚才选择的文件夹
` +
                    `2. 复制该文件夹的完整路径
` +
                    `3. 将路径粘贴到上面的输入框中`;
                
                showInfoDialog(message);
                
                // 将目录名填入输入框作为起始提示
                pathInput.value = '';
                pathInput.placeholder = `已选择目录名称：${dirName}（请输入完整路径）`;
            }
            
        } catch (error) {
            if (error.name !== 'AbortError') {
                showError('选择目录失败：' + error.message);
                console.error('Directory picker error:', error);
            }
            // AbortError 表示用户取消了选择，不需要显示错误
        }
    } else {
        // 不支持文件系统访问 API，显示帮助信息
        showHelpDialog();
    }
}

/**
 * 浏览目标文件夹
 */
async function browseTargetFolder() {
    const pathInput = document.getElementById('target-path-input');
    
    // 检查是否支持 File System Access API（Chrome, Edge 等）
    if ('showDirectoryPicker' in window) {
        try {
            const directoryHandle = await window.showDirectoryPicker();
            
            // File System Access API 无法直接获取完整路径（浏览器安全限制）
            // 但我们可以尝试通过读取目录内容来验证目录的有效性
            const dirName = directoryHandle.name;
            
            // 尝试读取目录内容来验证目录是否有效
            let fileCount = 0;
            try {
                // 遍历目录中的条目以获取文件数量
                for await (const entry of directoryHandle.values()) {
                    fileCount++;
                    // 只统计前几个条目以避免长时间等待
                    if (fileCount >= 5) break;
                }
                
                // 如果目录有效，提供更友好的提示
                const message = `已选择目录：${dirName}

` +
                    `检测到该目录包含文件/文件夹。

` +
                    `由于浏览器安全限制，无法自动获取完整路径，请执行以下操作：
` +
                    `1. 在文件管理器中打开刚才选择的文件夹
` +
                    `2. 复制该文件夹的完整路径
` +
                    `3. 将路径粘贴到上面的输入框中

` +
                    `提示：在 Finder (Mac) 或 文件资源管理器 (Windows) 中，
` +
                    `您可以右键点击目录并选择"复制路径"或按住 Option/Alt 键查看完整路径。`;
                
                showInfoDialog(message);
                
                // 将目录名填入输入框作为起始提示
                pathInput.value = '';
                pathInput.placeholder = `已选择目录：${dirName}（请在文件管理器中复制完整路径）`;
            } catch (readError) {
                // 如果读取目录失败，显示简化提示
                const message = `已选择目录：${dirName}

` +
                    `由于浏览器安全限制，无法自动获取完整路径，请执行以下操作：
` +
                    `1. 在文件管理器中打开刚才选择的文件夹
` +
                    `2. 复制该文件夹的完整路径
` +
                    `3. 将路径粘贴到上面的输入框中`;
                
                showInfoDialog(message);
                
                // 将目录名填入输入框作为起始提示
                pathInput.value = '';
                pathInput.placeholder = `已选择目录名称：${dirName}（请输入完整路径）`;
            }
            
        } catch (error) {
            if (error.name !== 'AbortError') {
                showError('选择目录失败：' + error.message);
                console.error('Directory picker error:', error);
            }
            // AbortError 表示用户取消了选择，不需要显示错误
        }
    } else {
        // 不支持文件系统访问 API，显示帮助信息
        showHelpDialog();
    }
}

/**
 * 显示评分结果
 */
function displayRatingResults(data) {
    const container = document.getElementById('rating-results');
    
    let html = `
        <div class="result-item">
            <h3>📊 统计信息</h3>
            <div class="stat-grid">
                <div class="stat-card">
                    <h3>${data.totalFiles}</h3>
                    <p>总文件数</p>
                </div>
            </div>
        </div>
    `;
    
    // 按评分显示文件
    html += `<div class="result-item">`;
    html += `<h3>⭐ 评分详情</h3>`;
    
    // 按评分从高到低排序
    const ratings = Object.keys(data.filesByRating).sort((a, b) => b - a);
    
    for (const rating of ratings) {
        const files = data.filesByRating[rating];
        html += `
            <div style="margin: 20px 0; padding: 15px; background: #f8f9fa; border-radius: 8px;">
                <h4 style="color: #667eea; margin-bottom: 10px;">${rating} 星 (${files.length} 个文件)</h4>
                <div style="max-height: 300px; overflow-y: auto;">
        `;
        
        for (const file of files) {
            html += `
                <div class="file-item">
                    <span class="file-name">${file.name}</span>
                    <span class="file-size">${file.sizeFormatted}</span>
                    <span class="file-path" style="font-size: 12px; color: #666; margin-left: 10px;" title="${file.fullPath}">${file.fullPath.substring(0, 50)}${file.fullPath.length > 50 ? '...' : ''}</span>
                </div>
            `;
        }
        
        html += `</div></div>`;
    }
    
    html += `</div>`;
    
    container.innerHTML = html;
}

/**
 * 显示扫描结果
 */

